﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MathLib;

namespace TrackingSim.Filtering.Measurements
{
    class Rcycz : Measurement
    {
        double range;
        double cy;
        double cz;
        Vector unit_los;
        double range_random_std;
        double range_bias_std;
        Vector true_pos;
        double true_range;

        public Rcycz():base(0.0)
        {
            range = 0.0;
            cy = 0.0;
            cz = 0.0;
            range_random_std = 0.0;
            range_bias_std = 0.0;
            unit_los = new Vector(3);
            true_pos = new Vector(3);
            true_range = 0.0;
        }

        public Rcycz(double _time, double _range, double _cy, double _cz):base(_time)
        {
            range = _range;
            cy = _cy;
            cz = _cz;
            range_random_std = 0.0;
            range_bias_std = 0.0;
            unit_los = new Vector(3);
            true_pos = new Vector(3);
            true_range = 0.0;
        }

        public override Measurement clone()
        {
            Rcycz copy = new Rcycz();

            copy.Time = Time;
            copy.range = range;
            copy.cy = cy;
            copy.cz = cz;
            copy.range_random_std = range_random_std;
            copy.range_bias_std = range_bias_std;
            copy.unit_los = unit_los.clone();
            copy.true_pos = true_pos.clone();
            copy.true_range = true_range;

            return copy;
        }

        public override Matrix get_r()
        {
            throw new NotImplementedException();
        }

        public override Matrix get_z()
        {
            throw new NotImplementedException();
        }

        public override Vector get_delta_body()
        {
            throw new NotImplementedException();
        }

        public double R
        {
            get{ return range; }
            set { range = value; }
        }

        public double Cy
        {
            get { return cy; }
            set { cy = value; }
        }

        public double Cz
        {
            get { return cz; }
            set { cz = value; }
        }

        public Vector UnitLOS
        {
            get { return unit_los; }
            set { unit_los = value; }
        }

        public double R_random_std
        {
            get { return range_random_std; }
            set { range_random_std = value; }
        }

        public double R_bias_std
        {
            get { return range_bias_std; }
            set { range_bias_std = value; }
        }

        public Vector TruePos
        {
            get { return true_pos; }
            set { true_pos = value; }
        }

        public double TrueR
        {
            get { return true_range; }
            set { true_range = value; }
        }
    }
}
